package minipost.post;

import java.io.Serializable;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import mimipost.database.PostSql;
import minipost.post.model.Post;

public class PostBean implements Serializable {
	public PostBean() {
		sql = new PostSql();
		typeMap = new HashMap<String, String>();
		typeMap.put("tech", "科技");
		typeMap.put("home", "国内");
		typeMap.put("abroad", "国外");
		typeMap.put("society", "社会");
	}
	
	/**
	 * 插入新文章
	 * @param post
	 */
	public void insert(Post post) {
		try {
			sql.insert(post);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * @return 所有文章列表
	 */
	public List<Post> getAllPosts() {
		List<Post> posts = null;
		try {
			posts = sql.getAllPosts();
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return posts;
	}
	
	/**
	 * 按照文章类型查询
	 * @param type 文章类型value
	 * @return 文章列表
	 */
	public List<Post> getPostByType(String type) {
		if (type == null || type.trim().equals("")) {
			return null;
		}
		
		List<Post> posts = null;
		try {
			posts = sql.getPostsByType(type);
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return posts;
	}
	
	/**
	 * 按照页面跳转时文章类型参数查询
	 * @param typeKey 文章类型key
	 * @return
	 */
	public List<Post> getPostByTypeKey(String typeKey) {
		String type = getTypeValue(typeKey);
		if (type == null) {
			return null;
		}

		return getPostByType(type);
	}
	
	/**
	 * 获取文章类型
	 * @param typeKey 文章主键
	 * @return
	 */
	public String getTypeValue(String typeKey) {
		return typeMap.get(typeKey);
	}
	
	/**
	 * 获取文章类型主键
	 * @param typeValue 文章类型
	 * @return
	 */
	public String getTypeKey(String typeValue) {
		for (String key : typeMap.keySet())
			if (typeMap.get(key).equals(typeValue))
				return key;
		return null;
	}
	
	/**
	 * 按照文章编号查询
	 * @param id 文章编号
	 * @return 文章 未找到为null
	 */
	public Post getPostById(int id) {
		Post post = null;
		try {
			post = sql.getPostById(id);
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return post;
	}
	
	/**
	 * 按照文章编号查询
	 * @param id 文章编号
	 * @return
	 */
	public Post getPostById(String id) {
		Post post = null;
		if (!(id == null || id.trim().equals(""))) {
			try {
				int n = Integer.parseInt(id);
				post = getPostById(n);
			} catch (NumberFormatException e) {
				
			}
		}
		
		return post;
	}
	
	/**
	  * 按照文章编号删除
	 * @param id 文章编号
	 */
	public void deleteById(int id) {
		try {
			sql.deleteById(id);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 修改文章
	 * @param post 修改后的文章
	 */
	public void update(Post post) {
		try {
			sql.update(post);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	public List<Post> getAllPosts(int index, int count) {
		List<Post> posts = null;
		try {
			posts = sql.getAllPosts(index, count);
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return posts;
	}
	
	public String getCount() {
		String result = null;
		try {
			result = sql.getCount();
		} catch (Exception e) {
			result = null;
		}
		return result;
	}

	private static final long serialVersionUID = 8842030712013949904L;	
	
	private PostSql sql = null;		// 数据库操作
	private Map<String, String> typeMap;		// 新闻类型map
}
